2022-09-21 Python 3.11の新機能(その4)PEP 654 例外グループとTaskGroup
Python 3.11では、新しい構文として、例外処理に try ~ except*
が追加されました
ちょっと用途がわかりにくい機能ですが、try ~ except*
は、主に asyncio による非同期処理で利用することを想定した機能で、asyncio
を使っていない場合はさしあたってあまり気にしなくても良いかもしれません。
ExceptionGroup例外¶
Python3.11では、組み込みの例外型に ExceptionGroup が追加されました。新しく追加された
2022-09-05 Python 3.11の新機能(その3)関数呼び出しのインライン化
Python 3.11では、パフォーマンスチューニングの一環として、Python関数呼び出しのインライン化 が行われました。既存のPythonインタープリタのしくみを大きく変更する変更ですので、簡単に解説しておきます。
先に書いておきますが、今回行われた「関数呼び出しのインライン化」は、C/C++などの inline
のように、ユーザ定義関数を呼び出し元で展開してオーバヘッドを削減するものではありません。また、Schemeなどにある末尾再帰の最適化でもありません。
cevalループ¶
Pythonインタープリタは、Pyt
2022-09-01 Python 3.11の新機能(その2) 特殊化適応的インタープリタ
特殊化適応的インタープリタ(PEP 659: Specializing Adaptive Interpreter) は、 Python 3.11の新機能(その1) CPython高速化計画 で紹介した CPython 高速化計画 の一環として導入された新機能で、実行中にプログラムをより効率的な処理に書き換えて高速化する仕組みです。
バイトコード¶
Pythonはプログラムを実行するとき、ソースコードをコンパイルしてバイトコードと呼ばれる実行用のデータを生成します。例えば、次の関数 func_add()
def func_add(a, b):
r
2022-08-30 Python 3.11の新機能(その1) CPython高速化計画
今年も、Pythonのメジャーリリースの季節がやってまいりました。2022年10月3日にリリース予定となっているPython 3.11の新機能を紹介します。
CPython 高速化計画¶
Python 3.11で最大のニュースは、なんと言っても Faster CPython: CPython 高速化計画 が開始されたことでしょう。
CPython 高速化計画は、Mark Shannon氏が提案したプランに基づいてPythonの高速化を行うもので、Pythonを毎年50%高速化し、互換性を保ちつつ 4年間で5倍高速化する ことを目標として
2021-10-05 Python 3.10の新機能(その11) その他の変更
その他、Python 3.10 で更新された機能から、お気に入りの項目を簡単に紹介します。
オックスフォード大学問題¶
さてみなさん、Pythonのインタープリタを起動して、次の式を実行してみてください。
0xfor-d*University
一見、エラーになりそうに見えますが、15
という値が返ってきます。なぜこんな結果になるのか、わかるでしょうか?
この式を見やすく変形すると、次のようになります。
0xf or (-d * University)
元の式 0xfor
は、16進数の 0xf
の直後に空白をつけ